home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / pascal / tpa22.zip / TPAREAD.NEW < prev    next >
Text File  |  1989-07-22  |  6KB  |  153 lines

  1.  
  2.   TP&Asm           Integrated Compile-Time Assembler          Version 2.2
  3.  
  4.                 Copyright (c) 1989  Richard W. Prescott
  5.                           All Rights Reserved
  6.  
  7. ═══════ Built-In Assembly Language Support for Turbo Pascal Compilers ═══════
  8.  
  9.  
  10.  
  11. New features added with TP&Asm Version 2.2:
  12.  
  13.   Full compile to Disk capability in the shareable version.  (I've
  14. decided to stop annoying people).  This is a legitimate shareware 
  15. version.
  16.  
  17.   Full support for Turbo Pascal version 5.5 and Object Oriented
  18. Programming, including:
  19.   Use of Assemble and Internal statements in method definitions
  20.    (Supports both "ObjectName@MethodName" and "ObjectName.MethodName")
  21.   Unqualified Indexed Reference to an Object's data within its methods
  22.   Unindexed Reference to Static Object data using Pascal Record syntax
  23.   Automatic support for assembly references to "Self" and "VMT"
  24.    (Freely change object structure without rewriting any assembly code!)
  25.   Direct calls to Static AND VIRTUAL methods using Unindexed MethodName
  26.   Standard virtual calls to Virtual methods using Indexed MethodName
  27. Please see the file TPA&OOP.PAS for examples of these features.
  28.  
  29. Version 2.2 also fixes the following bugs and restrictions:
  30.   TP&Asm 2.0 failed to find the DOS PATH variable if there was
  31.    another environment variable ending with 'PATH'.
  32.   TP&Asm 2.0 did not permit '@', '?', or '$' within Internal
  33.    data symbols.
  34.   TP&Asm 2.0 did not properly set the cursor position for syntax
  35.    errors detected in an Asm statement.
  36.  
  37.  
  38.  
  39. New features added with TP&Asm Version 2.0:
  40.  
  41.   Added support for Assembly reference to Pascal UnitName and record 
  42. component qualifiers, permitting references like:
  43.       Mov Al,UnitX.RecVar.NestedRec.ByteComponent
  44.  
  45.   Added support for references to String Function Result pointers in
  46. Load Pointer (Les/Lds) instructions:
  47.       Les Di,StringFunctionName
  48. (As in prior versions, all other Function types can be put in by
  49. name using a Mov instruction:
  50.       Mov PtrFunction,Ax    ;put in offset part
  51.       Mov PtrFunction+2,Dx  ;put in segment part
  52.  
  53.   Fixed an "undocumented restriction" (i.e., a bug) that prevented 
  54. use of the Assemble/Internal statements when compiling in the {$D-} 
  55. state.
  56.  
  57.  
  58.  
  59. New features added with TP&Asm Version 2 beta:
  60.  
  61.   Added the ability to trace (F7 Trace into, F4 Go to cursor, etc)  
  62. assembly code in the turbo integrated debugger with the capability
  63. to Watch, Evaluate, and Modify the state of all CPU registers and
  64. Flags during the Trace.
  65.  
  66.   Added support for Line Number detail for all assembly sections
  67. (Except Inline/Assembly DIRECTIVES) in MAP files produced with any
  68. Version 4 and 5 compilers.  Permits source level debugging in any 
  69. MAP-file compatible debugger.
  70.  
  71.   Added the capability to specify any valid Pascal Label within the
  72. current block as the target of an Assembly Call, Jmp, Loop, or 
  73. conditional jump.
  74.  
  75.   Added the capability to specify an assembly label which has been
  76. declared in a standard Pascal "Label" statement as the target of a 
  77. Pascal "Goto" statement.
  78.  
  79.   Added the Keyword "Assembly" as a synonym for "Assemble".
  80. This is useful to avoid misleading constructions like:
  81.       IF <Pascal Condition> THEN Assemble
  82. which gives the false impression of conditional assembly.  True 
  83. conditional assembly is possible as described below.  Conditional
  84. execution of an assembly block is more clearly indicated by:
  85.       IF <Pascal Condition> THEN Assembly
  86.  
  87.   Added the capability to use Assembly blocks in either clause of a
  88. Pascal conditional expression, eg:
  89.       IF Compiler.Ver = $50 THEN Assembly
  90.         < Assembly language statements >
  91.       END 
  92.       ELSE Assembly
  93.         < Assembly language statements >
  94.       END;
  95.  
  96.   Added the keyword "Asm" for concisely specifying single line
  97. assembly statements, eg:
  98.       Asm Push PascalVar; {Save PascalVar on Stack}
  99.  
  100.   Added the Assembly Keyword "Pas" for inserting single or
  101. multiple line Pascal statements within an assembly section, eg:
  102.       Pas WRITELN('Compiled with Turbo Pascal Version ',
  103.       Pas {$IFDEF VER40} '4.0' {$ELSE} '5.0' {$ENDIF} );
  104. Permits true conditional assembly by placing a section of
  105. assembly statements between "Pas {$IFDEF ..}" and "Pas {$ENDIF}".
  106.  
  107.   Added support for direct calls to Pascal Procedures and Functions
  108. defined in any standard or user-defined program or Unit.
  109.  
  110.   Added support for automatic Jump-Sizing for all backward AND
  111. FORWARD Jumps and Loops (Jmp, jZ, jAE, jCXZ, Loop, LoopNZ, etc).
  112. 3, 5, or 7 byte instruction sequences are automatically generated 
  113. if the target label is not within range of a 2 byte instruction.
  114.  
  115. This includes automatic shortening of unconditional jumps ...
  116.  
  117.     Jmp CloseBy    .. becomes ..    Jmp Short CloseBy ;2 bytes
  118.  
  119. ... automatic 5 byte "IF <Cond> Jmp" for backward AND FORWARD
  120. conditional jumps out of range ...
  121.  
  122.     jNZ FarAway    .. becomes ..        jZ >L0        ;2 bytes
  123.                                         Jmp FarAway   ;3 bytes
  124.                                     L0: 
  125.  
  126. ... and automatic 7 byte instruction sequences for backward AND 
  127. FORWARD jCXZ & Loop's out of range ...
  128.  
  129.     Loop FarAway   .. becomes ..        Loop >L0      ;2 bytes
  130.                                         Jmp Short >L1 ;2 bytes
  131.                                     L0: Jmp FarAway   ;3 bytes
  132.                                     L1:
  133.  
  134. TP&Asm does NOT pad forward jumps with NOP instructions - it
  135. will always build the smallest possible instruction.
  136.  
  137.   (The automatic Jump-Sizing feature is not enabled in Inline/Assembly 
  138. DIRECTIVES.  As described in the Turbo 4.0 and 5.0 manuals, Inline 
  139. Directives are intended for short sections of code which are unlikely 
  140. to exceed 127 bytes.  TP&Asm generates an error if a conditional jump 
  141. out of range is attempted in an Inline/Assembly Directive).
  142.  
  143.  
  144.   Added the KeyWord "CSDATA" for allocating "Global" CSeg data which 
  145. can be used throughout the current Unit.  Alternately, the FIRST
  146. procedure in a Unit or Program can allocate "LOCAL" CSeg data which
  147. can be used throughout the procedure.
  148.  
  149.   Added support for the construct "SEG Data" to facilitate restoring
  150. the Turbo Program Data Segment in a user written interrupt procedure:
  151.       Mov Ax,SEG Data
  152.       Mov Ds,Ax
  153.